package com.dc.common.utils;

import com.dc.common.constant.ResultStatus;
import com.dc.common.exception.ServiceException;
import com.fasterxml.jackson.databind.ObjectMapper;

/**
 * @author zhuangcy
 * @date 2021/1/18
 * @description 该工具类解决对象转化中的try-catch问题
 * 1.对象转JSON toJSON
 * 2.JSON转对象    toObject
 */
public class ObjectMapperUtil {
    /**
     * ObjectMapper 提供了读取和写入 JSON 的功能
     */
    public static final ObjectMapper MAPPER = new ObjectMapper();

    /**
     * 对象转json字符串
     *
     * @param obj
     * @return
     */
    public static String toJSON(Object obj) {
        String json = null;
        try {
            json = MAPPER.writeValueAsString(obj);
        } catch (Exception e) {
            e.printStackTrace();
            //如果报错需要转化为运行时异常
            throw new ServiceException(ResultStatus.ERROR_CODE.getCode(), "对象转换json出现异常");
        }
        return json;
    }

    /**
     * 用户传入class 返回该类型的对象，json字符串转对象
     */

    public static <T> T toObject(String json, Class<T> target) {
        T t = null;
        try {
            t = MAPPER.readValue(json, target);
        } catch (Exception e) {
            e.printStackTrace();
            throw new ServiceException(ResultStatus.ERROR_CODE.getCode(), "json转换对象出现异常");
        }
        return t;
    }
}